"""
宿舍电费公平分摊
这个月的宿舍电费花了500元，宿舍有10个人，大家要凑够500元来缴纳这个电费。
为了公平起见，按照每个人的用电器功率和每天用电时间计算比率。
设计一个程序，让大家输入自己的用电器功率（有1到多个电器）以及对应的平均每天使用时间，结束一个人输入后打印该同学的用电总功率，
最后按比率计算每个人应出多少钱。

提示：
1. 你可以使用一个循环来收集每个室友的用电信息。每次循环中，再使用一个子循环来收集该室友的所有用电器的功率和使用时间，当捕获到非用电信息时（即非数字）结束循环。
2. 用电总功耗可以通过功率乘以使用时间得到。所有室友的用电总功耗之和就是宿舍的总功耗。
3. 每个室友应缴纳的电费 = (该室友的总功耗 / 宿舍的总功耗) * 100元。
"""


def input_power_usage():
    """
    获取某个人的所有的用电信息
    """
    total_power_usage = 0
    count = 1
    while True:
        try:
            power = eval(input(f"  请输入用电器{count}的功率（W）："))
            time = eval(input("  请输入平均每天使用时间（h）："))
            total_power_usage += power * time
            count += 1
        except:
            print("输入结束，当前总功耗为:", total_power_usage, "Wh\n")
            break
    return total_power_usage


def calculate_payment(total_power_usages, total_cost):
    """
    计算要出多少钱
    """
    total_power = sum(total_power_usages)   # 总功耗
    # payments = [round(total_cost * usage / total_power, 2) for usage in total_power_usages]    # 列表推导式内计算每个人的用电比率 * 100，等到要给多少钱
    payments = [round(usage / total_power * total_cost, 2) for usage in total_power_usages]

    return payments


def main(total_people, total_cost):
    total_power_usages = []
    for i in range(total_people):
        print(f"请第{i + 1}位室友输入用电信息：")
        res = input_power_usage()
        total_power_usages.append(res)

    payments = calculate_payment(total_power_usages, total_cost)
    for i, payment in enumerate(payments):
        print(f"第{i + 1}位室友应缴纳电费：{payment}元")


if __name__ == '__main__':
    main(
        total_people=10,
        total_cost=500
    )